<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 基础数据模型
      var arr = [
        { id: '29', pid: '', name: '总裁办' },
        { id: '2c', pid: '', name: '财务部' },
        { id: '2d', pid: '2c', name: '财务核算部' },
        { id: '2f', pid: '2c', name: '薪资管理部' },
        { id: 'd2', pid: '', name: '技术部' },
        { id: 'd3', pid: 'd2', name: 'Java研发部' },
        { id: 'd31', pid: 'd3', name: 'Java研发部333' },
        { id: 'd33', pid: 'd3', name: 'Java研发部333' },
      ];

      // {
      //   id: '2c', pid: '', name: '财务部',
      //   children: [
      //     { id: '2d', pid: '2c', name: '财务核算部' },
      //     { id: '2f', pid: '2c', name: '薪资管理部' },
      //   ]
      // },

      function transfromListToTree(list, pid) {
        const arr = [];
        list.forEach((item) => {
          // 将每一个对象的pid和 传递进来的父亲的id进行对比
          if (item.pid === pid) {
            // item.children = [];
            item.children = transfromListToTree(list, item.id);
            arr.push(item);
          }
        });

        return arr;
      }
      // 第一个参数arr就是平铺的数组，第二个参数就是最顶级的id
      const newArr = transfromListToTree(arr, '');
      console.log(newArr);

      // function fn() {
      //   fn();
      // }
      // fn();

      // 写一个函数，传递一个数组和一个id，根据id得到对应对的名称
      var data = [
        {
          id: 1,
          name: '家电',
          goods: [
            { id: 11, name: '冰箱', goods: [{ id: 111, name: '海尔' }] },
            { id: 12, name: '洗衣机' },
          ],
        },
        { id: 2, name: '服饰' },
      ];

      let obj = {};
      function getName(arr, id) {
        arr.forEach((item) => {
          if (item.id === id) {
            obj = item;
          } else if (item.goods && item.goods.length > 0) {
            obj = getName(item.goods, id);
          }
        });

        return obj;
      }

      console.log(getName(data, 1));
      console.log(getName(data, 11));
      console.log(getName(data, 111));
      console.log(getName(data, 1111));

      // function loop(arr, id) {
      //   let obj = {};
      //   function getName(arr, id) {
      //     arr.forEach((item) => {
      //       if (item.id === id) {
      //         obj = item;
      //       } else if (item.goods && item.goods.length > 0) {
      //         obj = getName(item.goods, id);
      //       }
      //     });

      //     return obj;
      //   }
      //   getName();
      //   return obj;
      // }
      // loop(data, 11);

      function test() {
        console.log('1');
        for (var i = 10; i < 14; i++) {
          if (i === 12) {
            // continue; // 跳过当次循环，继续下一次
            // break; // 跳出 结束循环
            return; // 跳出循环，跳出函数
          }
          console.log(i);
        }

        console.log('2');
      }
      test(); // return 1 10 11  break: 1 10 11 2  continue: 1 10 11 13 2

      function fn1() {
        console.log('1');
        [11, 22].forEach((item) => {
          console.log(item);
          return;
        });
        console.log(2);
      }
      fn1();

      // some every
      // 含义： some 检测数组里面是否有一个元素 符合条件，如果有就返回true，没有就返回false
      //        every  检测数组是否所有元素都符合条件，true， 有一个不是就是false
      //        some ,every 有优化，如果条件符合 就直接退出了循环
      // 参数： some的参数：是一个回调函数， 回调函数的参数： item, idnex, arr
      // 返回值：some的返回值： 布尔值 true/false
      const res = [1, 2, 3, 4, 5].some((item) => {
        console.log(1); // 4个1
        return item > 3;
      });
      console.log(res); // true

      const res2 = [1, 2, 3, 4, 5].every((item) => {
        console.log(1); // 1个
        return item > 3;
      });
      console.log(res2); // false
    </script>
  </body>
</html>
